//
//  MapManager.h
//  FrameWork
//
//  Created by Eagle on 5/27/10.
//  Copyright 2010 __MyCompanyName__. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "FileTools.h"
//#import <vector.h>
#import "cocos2d.h"
#import "Parameter.h"

#define MAPFILE_PATH 1
#define MAPFILE_NOTOWER 2
#define MAPFILE_TOWER 3
#define MAPFILE_START 4
#define MAPFILE_END 5



#define MAP_DEFAULT -999
#define MAP_PATH -5
#define MAP_TOWER -10
#define MAP_NOTOWER -101
#define MAP_END 0
#define MAP_WITHTOWER -110



@interface Location : NSObject
{
	int _x;
	int _y;
}

@property(nonatomic, assign) int x;
@property(nonatomic, assign) int y;

+(id) LocationMake: (int)x y:(int)y;

@end


@interface MapManager : NSObject {
	
	Location* _start;//地图开始位置
	Location* _end;//地图结束位置
	
	//行数
	unsigned int _row;
	
	//列数
	unsigned int _column;
	
	
	
	//地图类型
	int _type;
	
	
	//敌兵寻路地图
	NSMutableArray* _mapLoc;
	
	//放置塔,判断,标记地图
	NSMutableArray* _backMapLoc;
	
	
	//武将移动地图
	NSMutableArray *_warriorMapLoc;
	
	
	//武将判断用地图
	NSMutableArray *_backWarriorMapLoc;
	
	
	NSMutableArray* _closeList;
	NSMutableArray* _openList;
	NSMutableArray* _preOpenList;
	
}

//读取地图文件
-(void) LoadMap: (const char*) filename type:(int)type;

//标记整个地图,只标记了背后用于计算的地图
-(void) MarkFullMap:(Location*) loc;

//是否允许放塔
-(BOOL) EnableTower:(Location*) loc;

//放置塔
-(void) PutTower:(Location*) loc;

//在背后地图上放塔
-(void) PutBackTower:(Location*) loc;

//移除塔
-(void) RemoveTower:(Location*) loc;

//从背后地图将数据拷贝给前台地图
-(void) CopyBack;

//从前台地图恢复背后地图
-(void) ResetBack;

//地图类型
-(int) GetType;

//得到起点
-(Location*) GetStart;

//得到终点
-(Location*) GetEnd;

//得到下一个格子
-(Location*) GetNextLocation:(Location*) loc;

//得到一个格子的值
-(int) GetNumber:(Location*) loc;


//得到武将背后地图的值
-(int) GetWarriorBackNumber:(Location*) loc;



//武将相关地图操作

//标记武将背后地图数组
-(void) MarkWarriorMap:(Location*) loc;

//从武将背后地图拷贝到武将前台地图
-(void) WarriorCopyBack;

//从武将前台地图恢复武将背后地图
-(void) WarriorReset;

//找到武将下一次移动方向
-(Location*) GetWarriorNextLocation:(Location *)loc;

//是否允许移动到这个地方
-(BOOL) EnableMoveToLoc:(Location *)loc fromWarriorLoc:(Location *) warriorLoc; 

//当前点是否是武将可施法地区
-(BOOL)IsEnableSkill:(Location*)loc;



@end
